package com.ev.scm.service;

import com.ev.framework.utils.R;
import com.ev.scm.domain.DeliveryNoteDO;
import com.ev.scm.domain.DeliveryNoteItemDO;
import com.ev.scm.vo.CountBean;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
   * Description 发货通知接口
   * Company Xin Soft
   * @author Liu Yu
   * Date 2020/12/30
  **/
public interface IDeliveryNoteService {

    /**
     * 新增或修改发货通知
     * @param deliveryNoteDO 发货通知主表bean
     * @param bodyItem 发货通知子表列表
     * @param uploadAttachment 上传附件
     * @param itemIds 删除的数据id集合
     * @return R
     * @throws Exception 异常
     */
    default R saveHandle(DeliveryNoteDO deliveryNoteDO, String bodyItem, String uploadAttachment, Long[] itemIds) throws Exception {
        return null;
    }

    /**
     * 根据入参查询发货通知明细表中的总数量
     * @param sourceIds 源单id列表
     * @param sourceType 源单类别
     * @return 总数
     */
    default List<CountBean> findCountBySource(List<Object> sourceIds,Long sourceType)  throws Exception {
        return null;
    };

    /**
     * 发货通知审核/反审核
     * @param id 发货通知主表id
     * @param auditSign 标志
     * @return R
     * @throws Exception 异常
     */
    default R auditOrReverseAudit(Long id, Long auditSign) throws Exception {
        return null;
    };

    /**
     * 发货通知列表查询
     * @param params 参数
     * @return R
     * @throws Exception 异常
     */
    default R findList(Map<String, Object> params) throws Exception {
        return null;
    };

    default List<Map<String,Object>> getDeliveryNoteList(Map<String, Object> params) throws Exception {
        return null;
    }

    /**
     * 根据id获取发货通知详情
     * @param id 发货通知主表id
     * @return 发货通知详情
     * @throws Exception 异常
     */
    default R getDetail(Long id) throws Exception {
        return null;
    };

    /**
     * 根据id获取发货通知子表详情
     * @param id 发货通知子表id
     * @return 发货通知详情
     * @throws Exception 异常
     */
    default DeliveryNoteItemDO getItemDetail(Long id) throws Exception {
        return null;
    };


    List<DeliveryNoteItemDO>findItemDetailByIds(@Param("list") List<Long> itemIds);
    /**
     * 销售出库引用发货通知单
     * @param params 入参
     * @return 发货通知单
     * @throws Exception 异常
     */
    default R findDialog(Map<String, Object> params) throws Exception {
        return null;
    };

    /**
     * 根据发货通知主表id删除主子表记录
     * @param ids 发货通知主表id列表
     * @return R
     * @throws Exception 异常
     */
    default R batchDelete(List<Long> ids) throws Exception {
        return null;
    };

    //反写可执行数量
    void retrographyExecutableCount( Map<Long, BigDecimal> countOfThis );


}
